package Juego.control;

import java.util.ArrayList;
import java.util.Scanner;

import Juego.modelo.Batalla.Batalla;
import Juego.modelo.Recurso.Recurso;
import Juego.modelo.Unidad.Unidad;
import Juego.vista.MVCBatalla;

public class controlBatalla {
	Batalla Actual;
	Scanner In;
	MVCBatalla MapaBatalla;
	Recurso RecUsr;
	public controlBatalla( Scanner A , Recurso Mio ) {
		In = A;
		RecUsr = Mio;
		MapaBatalla = new MVCBatalla();
		MapaBatalla.initMapa();
	}
	void mostrarLista( ArrayList< Unidad > E  ){

		int j = 0;
		for( int i = 0 ; i < E.size() ;i++ ){
			if( E.get( i ) == null || E.get( i ).getVida() == 0 ) continue;
			System.out.println( ( int )( j+ 1 ) +". " + E.get(i) );
			j++;
		}
	} 
	public Batalla getActual() {
		return Actual;
	}
	public void setActual(Batalla actual) {
		Actual = actual;
	
	}
	
	void atacar( int x , int y ){
		Actual.ListaEnemigo.get( y ).setVida( ( Actual.ListaEnemigo.get( y ).getVida() - Actual.ListaUsuario.get( x ).getDanho() ) );
		if( Actual.ListaEnemigo.get( y ).getVida() <= 0 ){
			Unidad T = Actual.ListaEnemigo.get( y );
			Actual.ListaEnemigo.remove( y );
			T.setVida( 0 );
			Actual.Ganancia.add( new Recurso( 10 , 10 , 10 , 10  ) ) ;
		}
	}
	
	public Recurso simulaBatalla(){
		do{
		// TODO pintar mapa
			MapaBatalla.dibujar( Actual );
			String accion = In.next();
			if( accion.equalsIgnoreCase( "Atacar" ) ){
				if( RecUsr.getEnergia() == 0 )	{
					System.out.println( " No tiene Energia ");
				}
				else{
					System.out.println( "Mias : " );
					mostrarLista( Actual.ListaUsuario );
					System.out.println( "Enemigo : " );
					mostrarLista( Actual.ListaEnemigo );
					int x = In.nextInt()-1 , y = In.nextInt()-1;
					if( x < 0 || x > Actual.ListaUsuario.size() || y < 0 || y > Actual.ListaEnemigo.size() ){
						System.out.println( "Mala seleccion" );
					}
					else{
						atacar( x , y );
						int tmp  = 0;
						for( int i = 0 ; i < Actual.ListaEnemigo.size() ; i++ ){
							tmp += ( Actual.ListaEnemigo.get( i ).getVida() == 0 )?1:0;
						}
						if( tmp == Actual.ListaEnemigo.size() )
							finalizar("Usuario");
					}
				}
			}
			else if( accion.equalsIgnoreCase( "Salir" ) ){
				return finalizar("Enemigo");
			}
			else if( accion.equalsIgnoreCase("Pausar")){
				return null;
			}
			else{
				System.out.println("No reconocido");
				continue;
			}
			RecUsr.setEnergia( RecUsr.getEnergia() -1 );
			AtacaEnemigo();
			int tmp = 0;
			for( int i = 0 ; i < Actual.ListaUsuario.size() ; i++ ){
				tmp += ( Actual.ListaUsuario.get( i ).getVida() == 0 )?1:0;
			}
			if( tmp == Actual.ListaUsuario.size( ) )	return finalizar( "Enemigo" );			
		} while( true );
	}
	private void AtacaEnemigo() {
		int j;
		for( j = 0 ; j < Actual.ListaEnemigo.size(); j++ ){
			if( Actual.ListaEnemigo.get( j ).getVida() == 0 ) continue;
			break;
		}
		for( int i = 0 ; i < Actual.ListaUsuario.size() ; i++ ){
			if( Actual.ListaUsuario.get( i ).getVida() == 0 ) continue;
			Actual.ListaUsuario.get( i ).setVida( ( Actual.ListaUsuario.get( i ).getVida() - Actual.ListaEnemigo.get( j ).getDanho() ) );
			break;
		}
		
	}
	private Recurso finalizar( String Msg ) {
		if( Msg.equalsIgnoreCase("Enemigo") ) {
			Actual.Enemigo.RecAmigo.add( Actual.Ganancia );
			RecUsr.minus( Actual.Ganancia );
			System.out.println("	TE GANO TU ENEMIGO XD ");
			return new Recurso(-1,-1, -1, -1);
		}
		else if( Msg.equalsIgnoreCase("Usuario") ){ 
			RecUsr.add( Actual.Ganancia );			
			System.out.println("	GANASTE  XD ");
			return new Recurso(1,1, 1, 1);
		}
		// TODO Auto-generated method stub
				
		return null;
	}
}
